import sqlite3
import os

import pandas as pd

def update_table_data(file):
    """
    修改数据库的航班表和订票表的时间，使其靠近当前的时间
    """
    conn = sqlite3.connect(file)
    cursor = conn.cursor()

    # 找出所有表名的列表
    tables = pd.read_sql(
        "SELECT name FROM sqlite_master WHERE type='table';", conn
    ).name.tolist()
    # 找出其中所有表的数据
    tdf = {}
    for t in tables:
        tdf[t] = pd.read_sql(f"SELECT * from {t}", conn)
    # 找出示例中最大的时间
    example_time = pd.to_datetime(
        tdf["flights"]["actual_departure"].replace("\\N", pd.NaT)
    ).max()
    # 获取当前时间（"now"），并将其时区设置为与 example_time 相同（如果 example_time 有时区信息）。
    current_time = pd.to_datetime("now").tz_localize(example_time.tz)
    # 计算时间差
    time_diff = current_time - example_time
    # 更新订票表中的订票时间，将所有预定日期整体向后移，以当前时间作为基准
    tdf["bookings"]["book_date"] = (
        pd.to_datetime(tdf["bookings"]["book_date"].replace("\\N", pd.NaT), utc=True)
        + time_diff
    )
    # 更新航班表中需要修改的时间列
    datetime_columns = [
        "scheduled_departure",
        "scheduled_arrival",
        "actual_departure",
        "actual_arrival",
    ]
    for column in datetime_columns:
        tdf["flights"][column] = (
            # 清理 \\N 变为 NaT，并转化为datetime
            pd.to_datetime(tdf["flights"][column].replace("\\N", pd.NaT)) + time_diff
        )
    # 将修改后的数据写回sqlite数据库中
    for table_name, df in tdf.items():
        df.to_sql(table_name, conn, if_exists="replace", index=False)
    # 解除资源消耗
    del df
    del tdf
    conn.commit()
    conn.close()

    return file